Data Source

  • These data come from the Center for Disease Control and Prevention (CDC) PLACES: Local Data for Better Health.
  • More information about the CDC PLACES data can be found here.
  • Data shown here were downloaded using the CDC PLACES API in October of 2021. Documentation for the API can be found here and documentation for the data can be found here.
  • The CDC has not released an update schedule for CDC PLACES data.

The Data Used Here

  • PLACES is a collaboration between the CDC, the Robert Wood Johnson Foundation, and the CDC Foundation.
  • The data provide model-based estimates for chronic disease risk factors, health outcomes, and clinical prevention services. According the the website, “CDC uses an innovative peer-reviewed multilevel regression and poststratification (MPR) approach that links geocoded health surveys and high spatial resolution population demographic and socioeconomic data.”
  • CDC pulls data from the CDC Behavioral Risk Factor Surveillance System, the Census 2010 population, and the American Community Survey estimates.
  • The full data from the CDC include 27 measures: 5 unhealthy behaviors, 13 health outcomes, and 9 prevention practices.
  • The data used here include a total of 17 variables. Below, we show a number of them grouped into health outcomes, health behaviors and health access.
  • All of the data values represent the predicted percent prevalence of a given outcome within a census tract. For almost all measures, respondents to health surveys answered whether they had ever been diagnosed with a given outcome by a health care professional. For many indicators, the estimated prevalance is likely to be an underestimate, particularly in areas where residents have limited access to health care and are therefore less likely to receive a medical diagnosis for a particular ailment.
  • Data for some outcomes are from 2017, but most are from 2018.
  • Data are available at the tract levels for Accomack and Northampton counties.

Variable descriptions

These summaries are based on data at the block group level from the years 1980-2020. Data are also available at the block, tract, and county levels.

# meta %>% 
#   filter(su_tract == 1) %>%
#   select(varname, about) %>% as.list()

glimpse(eastdat)
## Rows: 11
## Columns: 20
## $ locationname                <dbl> 51001090300, 51001090500, 51001090700, 510…
## $ countyname                  <chr> "Accomack", "Accomack", "Accomack", "Accom…
## $ totalpopulation             <int> 2335, 2849, 4907, 4401, 6234, 2941, 6156, …
## $ Coronary_Heart_Disease2018  <dbl> 10.3, 8.9, 8.6, 9.7, 9.5, 9.4, 8.4, 10.7, …
## $ Binge_Drinking2018          <dbl> 14.4, 14.9, 14.0, 13.6, 13.8, 14.9, 14.8, …
## $ Mental_Health2018           <dbl> 16.9, 16.3, 14.0, 13.1, 17.5, 12.5, 14.6, …
## $ High_Blood_Pressure2017     <dbl> 41.2, 38.9, 40.5, 41.1, 41.4, 38.4, 40.0, …
## $ Physical_Inactivity2018     <dbl> 34.6, 33.7, 29.3, 28.2, 37.4, 25.8, 29.7, …
## $ Diabetes2018                <dbl> 16.1, 15.3, 15.0, 14.8, 17.3, 13.0, 14.6, …
## $ Current_Smoking2018         <dbl> 26.2, 24.5, 20.3, 18.5, 25.8, 17.7, 21.7, …
## $ Cancer_except_skin2018      <dbl> 7.8, 7.2, 8.1, 9.5, 6.6, 9.8, 7.6, 7.5, 7.…
## $ Current_Asthma2018          <dbl> 10.8, 10.7, 10.3, 9.7, 11.2, 9.2, 10.3, 11…
## $ Dental_Visit2018            <dbl> 56.8, 57.4, 64.9, 67.5, 51.7, 70.8, 63.3, …
## $ High_Cholesterol2017        <dbl> 40.3, 37.4, 38.4, 41.0, 37.4, 41.2, 38.4, …
## $ COPD2018                    <dbl> 11.9, 10.3, 9.2, 9.9, 10.8, 9.4, 9.2, 12.4…
## $ Obesity2018                 <dbl> 40.5, 40.5, 38.7, 36.3, 43.5, 33.4, 38.5, …
## $ Physical_Health2018         <dbl> 18.4, 17.0, 15.0, 15.2, 18.5, 13.9, 15.1, …
## $ Health_Insurance2018        <dbl> 21.0, 22.6, 16.8, 14.3, 27.7, 13.3, 17.4, …
## $ less_than_sevenhr_sleep2018 <dbl> 40.0, 40.7, 39.1, 35.9, 42.7, 33.5, 39.1, …
## $ Annual_Checkup2018          <dbl> 79.4, 79.2, 82.1, 82.3, 79.5, 81.1, 80.7, …
eastdat %>% select(-c(locationname, countyname, totalpopulation)) %>%
  select(where(~is.numeric(.x))) %>% 
  as.data.frame() %>% 
  stargazer(., type = "text", title = "Summary Statistics", digits = 1,
            summary.stat = c("mean", "sd", "min", "median", "max"))
## 
## Summary Statistics
## ==========================================================
## Statistic                   Mean St. Dev. Min  Median Max 
## ----------------------------------------------------------
## Coronary_Heart_Disease2018  9.6    0.9    8.4   9.4   11.3
## Binge_Drinking2018          13.9   0.9    12.2  13.8  14.9
## Mental_Health2018           15.0   1.8    12.5  14.6  17.6
## High_Blood_Pressure2017     41.3   1.8    38.4  41.2  44.0
## Physical_Inactivity2018     31.8   3.9    25.8  29.7  37.6
## Diabetes2018                15.8   1.8    13.0  15.4  19.5
## Current_Smoking2018         22.0   3.3    17.7  21.7  26.9
## Cancer_except_skin2018      8.1    1.0    6.6   7.9   9.8 
## Current_Asthma2018          10.4   0.7    9.2   10.3  11.6
## Dental_Visit2018            61.2   6.1    51.7  63.3  70.8
## High_Cholesterol2017        39.4   1.4    37.4  39.8  41.2
## COPD2018                    10.3   1.2    9.1   9.9   12.4
## Obesity2018                 40.6   3.6    33.4  40.5  45.2
## Physical_Health2018         16.6   2.0    13.9  15.7  20.1
## Health_Insurance2018        19.0   4.2     13   17.8   28 
## less_than_sevenhr_sleep2018 39.3   2.7     34   39.8   43 
## Annual_Checkup2018          81.2   1.3    79.2  81.5  82.9
## ----------------------------------------------------------

Visual distribution

These distributions show data at the block group level from the years 1980-2020. Data are also available at the block, tract, and county levels.

longdat <- eastdat %>% select(-c(countyname, totalpopulation)) %>% 
  pivot_longer(-locationname, names_to = "measure", values_to = "value") 

longdat$measure <- factor(longdat$measure,
                         levels = c("Coronary_Heart_Disease2018", "Binge_Drinking2018", "Mental_Health2018", "High_Blood_Pressure2017", "Physical_Inactivity2018", "Diabetes2018", "Current_Smoking2018", "Cancer_except_skin2018", "Current_Asthma2018", "Dental_Visit2018", "High_Cholesterol2017", "COPD2018", "Obesity2018", "Physical_Health2018", "Health_Insurance2018", "less_than_sevenhr_sleep2018", "Annual_Checkup2018"))

longdat %>%
  ggplot(aes(x = value, fill = measure)) +
  scale_fill_viridis(option = "viridis", discrete = TRUE, guide = "none") +
  geom_histogram() + 
  facet_wrap(~measure, scales = "free", ncol = 4)

meta %>% 
  filter(varname %in% c("Coronary_Heart_Disease2018", "Binge_Drinking2018", "Mental_Health2018", "High_Blood_Pressure2017", "Physical_Inactivity2018", "Diabetes2018", "Current_Smoking2018", "Cancer_except_skin2018", "Current_Asthma2018", "Dental_Visit2018", "High_Cholesterol2017", "COPD2018", "Obesity2018", "Physical_Health2018", "Health_Insurance2018", "less_than_sevenhr_sleep2018", "Annual_Checkup2018")) %>%
  mutate(label = paste0(varname, ": ", about)) %>% 
  select(label) %>% 
  as.list()

$label [1] “Coronary_Heart_Disease2018: Adjusted percent of respondents aged >= 18 years who report ever having been told by a health professional that they had angina or coronary heart disease. Based on being diagnosed and respondent recall of diagnosis, so might be underestimate.”
[2] “Binge_Drinking2018: Adjusted percent of respondents aged >= 18 years who report having five or more drinks (men) or four or more drinks (women) on an occassion in the past 30 days. Not an indicator of the frequency of binge drinking or the specific amount of alcohol consumed.”
[3] “Mental_Health2018: Adjusted percent of respondents aged >= 18 years who report 14 or more days during the past 30 days during which their mental health was not good. Based self-assessment only and does not have an objective health component, so it’s difficult to assess reliability and validity.”
[4] “High_Blood_Pressure2017: Adjusted percent of respondents aged >= 18 years who report ever having been told by a health professional that they have high blood pressure. Women who were told high blood pressure only during pregnancy and those who wree told they had borderline hypertension were not included. Based self-assessment only and does not have an objective health component, so it’s difficult to assess reliability and validity. Based on being diagnosed and respondent recall of diagnosis, so might be underestimate. Not a measure of current high blood pressure.” [5] “Physical_Inactivity2018: Adjusted percent of respondents aged >= 18 years who answered "no" to the following question: "During the past month, other than your regular job, did you participate in any physical activity or exercise such as running, calisthenics, golf, gardening, or walking for exercise?" Only captures information about nonoccupational physical activity.”
[6] “Diabetes2018: Adjusted percent of respondents aged >= 18 years who report ever having been told by a health professional that they had diabetes (other than diabetes during pregnancy). Based on being diagnosed and respondent recall of diagnosis, so might be underestimate.”
[7] “Current_Smoking2018: Adjusted percent of respondents aged >= 18 years who report having smoked >= 100 cigarettes in their lifetime and currently smoke every day or some days. Not a measure of lifetime or current number of cigarettes smoked, and each of these factors can affect the risk for acquiring chronic disease from smoking. Not not measure intent or attempts to quit smoking among smokers or exposure to secondhand smoke among nonsmokers.”
[8] “Cancer_except_skin2018: Adjusted percent of respondents aged >= 18 years who report ever having been told by a health professional that they have any type of cancer except skin cancer. Not specific to cancer type. Based on being diagnosed and respondent recall of diagnosis, so might be underestimate.”
[9] “Current_Asthma2018: Adjusted percent of respondents aged >= 18 years who answer "yes" to both of the following questions: (1) "Have you ever been told by a doctor, nurse, or other health professional that you have asthma?" and (2) "Do you still have asthma?" This indicator requires doctor diagnosis, which may not include all persons with asthma”
[10] “Dental_Visit2018: Adjusted percent of respondents aged >= 18 years who report having been to the dentist or dental clinic in the previous year.”
[11] “High_Cholesterol2017: Adjusted percent of respondents aged >= 18 years who report ever having been told by a health professional that they had high cholesterol out of all respondents who have had their cholesterol checked in the last 5 years. Reliability can be low on this indicator because patients might not know what specific tests have been performed on their blood samples unless their is an issue and many patients cannot afford to have their cholesterol checked.”
[12] “COPD2018: Adjusted percent of respondents aged >= 18 years who report ever having been told by a health professional that they had COPD, emphysema, or chronic bronchitis. Based on being diagnosed and respondent recall of diagnosis, so might be underestimate.”
[13] “Obesity2018: Adjusted percent of respondents aged >= 18 years who have a BMI >= 30 kg/m^2 calculated from self-reported weight and height excluding respondents who were <3ft tall or >= 8ft; weighed <50lbs or >= 650 lbs; BMI < 12 or >= 100; pregnant women. Self-reports of height and weight lead to lower BMI estimates compared to height and weight measurements.”
[14] “Physical_Health2018: Adjusted percent of respondents aged >= 18 years who report 14 or more days during the past 30 days during which their physical health was not good. Based self-assessment only and does not have an objective health component, so it’s difficult to assess reliability and validity.”
[15] “Health_Insurance2018: Adjusted percent of respondents aged 18-64 who report having no current health insurance coverage. All persons >= 65 are eligible for Medicare. This indicator is likely to be an underestimate due to how variable health insurance coverage can be.”
[16] “less_than_sevenhr_sleep2018: Adjusted percent of respondents aged >= 18 years who report usually getting insufficient sleep (<7 hours for those aged >= 18 years, on average, during a 24-hour period). Indicator does not measure variations in sleep duration, quality of sleep, or specific sleep problems.”
[17] “Annual_Checkup2018: Adjusted percent of respondents aged >= 18 years who report having been to a doctor for a routine checkup (e.g., a general physical exam, not an exam for specifiic injury, illness, condition) in the previous year.”

Health outcomes

Asthma

  • Adjusted percent of survey respondents aged >= 18 who reported that they had ever been told by a health professional that they have asthma and that they still have asthma.
pal <- colorNumeric("Blues", domain = mapdat$Current_Asthma2018)

leaflet() %>% 
  addProviderTiles("CartoDB.Positron") %>% 
  addPolygons(data = mapdat,
              fillColor = ~pal(mapdat$Current_Asthma2018),
              weight = 1,
              opacity = 1,
              color = "white", 
              fillOpacity = 0.6,
              highlight = highlightOptions(
                weight = 2,
                fillOpacity = 0.8,
                bringToFront = T),
              popup = paste0("GEOID: ", mapdat$GEOID, "<br>",
                             "Percent of adults with asthma: ", mapdat$Current_Asthma2018)) %>% 
  leaflet::addLegend("bottomright", pal = pal, values = (mapdat$Current_Asthma2018), 
            title = "Predicted % of adults <br> with current asthma <br> in 2018", opacity = 0.7)

Coronary Heart Disease

  • Adjusted percent of survey respondents aged >= 18 who reported that they had ever been told by a health professional that they had angina or coronary hearth disease.
pal <- colorNumeric("Blues", domain = mapdat$Coronary_Heart_Disease2018)

leaflet() %>% 
  addProviderTiles("CartoDB.Positron") %>% 
  addPolygons(data = mapdat,
              fillColor = ~pal(mapdat$Coronary_Heart_Disease2018),
              weight = 1,
              opacity = 1,
              color = "white", 
              fillOpacity = 0.6,
              highlight = highlightOptions(
                weight = 2,
                fillOpacity = 0.8,
                bringToFront = T),
              popup = paste0("GEOID: ", mapdat$GEOID, "<br>",
                             "Percent of adults with Coronary Heart Disease: ", mapdat$Coronary_Heart_Disease2018)) %>% 
  leaflet::addLegend("bottomright", pal = pal, values = (mapdat$Coronary_Heart_Disease2018), 
            title = "Predicted % of adults <br> with Coronary Heart Disease <br> in 2018", opacity = 0.7)

Cancer (excluding skin cancer)

  • Adjusted percent of survey respondents aged >= 18 who reported that they had ever been told by a health professional that they have any type of cancer except skin cancer. This variable is not specific to any type of cancer.
pal <- colorNumeric("Blues", domain = mapdat$Cancer_except_skin2018)

leaflet() %>% 
  addProviderTiles("CartoDB.Positron") %>% 
  addPolygons(data = mapdat,
              fillColor = ~pal(mapdat$Cancer_except_skin2018),
              weight = 1,
              opacity = 1,
              color = "white", 
              fillOpacity = 0.6,
              highlight = highlightOptions(
                weight = 2,
                fillOpacity = 0.8,
                bringToFront = T),
              popup = paste0("GEOID: ", mapdat$GEOID, "<br>",
                             "Percent of adults with cancer: ", mapdat$Coronary_Heart_Disease2018)) %>% 
  leaflet::addLegend("bottomright", pal = pal, values = (mapdat$Cancer_except_skin2018), 
            title = "Predicted % of adults <br> with cancer (excluding skin) <br> in 2018", opacity = 0.7)

Diabetes

  • Adjusted percent of survey respondents aged >= 18 who reported that they had ever been told by a health professional that they had diabetes (excluding diabetes during pregnancy).
pal <- colorNumeric("Blues", domain = mapdat$Diabetes2018)

leaflet() %>% 
  addProviderTiles("CartoDB.Positron") %>% 
  addPolygons(data = mapdat,
              fillColor = ~pal(mapdat$Diabetes2018),
              weight = 1,
              opacity = 1,
              color = "white", 
              fillOpacity = 0.6,
              highlight = highlightOptions(
                weight = 2,
                fillOpacity = 0.8,
                bringToFront = T),
              popup = paste0("GEOID: ", mapdat$GEOID, "<br>",
                             "Percent of adults with diabetes: ", mapdat$Diabetes2018)) %>% 
  leaflet::addLegend("bottomright", pal = pal, values = (mapdat$Diabetes2018), 
            title = "Predicted % of adults <br> with diabetes <br> in 2018", opacity = 0.7)

Obesity

  • Adjusted percent of survey respondents aged >= 18 who reported that they have a BMI >= 30kg/m^2. This indicator is calculated by the CDC from self-reported weight and height, excluding pregnant women. Self-reported height and weight tend to lead to lower BMI estimates than clinical height and weight measurements.
pal <- colorNumeric("Blues", domain = mapdat$Obesity2018)

leaflet() %>% 
  addProviderTiles("CartoDB.Positron") %>% 
  addPolygons(data = mapdat,
              fillColor = ~pal(mapdat$Obesity2018),
              weight = 1,
              opacity = 1,
              color = "white", 
              fillOpacity = 0.6,
              highlight = highlightOptions(
                weight = 2,
                fillOpacity = 0.8,
                bringToFront = T),
              popup = paste0("GEOID: ", mapdat$GEOID, "<br>",
                             "Percent of adults who have a BMI >= 30: ", mapdat$Obesity2018)) %>% 
  leaflet::addLegend("bottomright", pal = pal, values = (mapdat$Obesity2018), 
            title = "Predicted % of adults <br> who had a BMI >= 30 <br> in 2018", opacity = 0.7)

Health access

Lack of health insurance

  • Adjusted percent of respondents aged 18-64 who reported have no current health insurance.
pal <- colorNumeric("Blues", domain = mapdat$Health_Insurance2018)

leaflet() %>% 
  addProviderTiles("CartoDB.Positron") %>% 
  addPolygons(data = mapdat,
              fillColor = ~pal(mapdat$Health_Insurance2018),
              weight = 1,
              opacity = 1,
              color = "white", 
              fillOpacity = 0.6,
              highlight = highlightOptions(
                weight = 2,
                fillOpacity = 0.8,
                bringToFront = T),
              popup = paste0("GEOID: ", mapdat$GEOID, "<br>",
                             "Percent of adults without health insurance: ", mapdat$Health_Insurance2018)) %>% 
  leaflet::addLegend("bottomright", pal = pal, values = (mapdat$Health_Insurance2018), 
            title = "Predicted % of adults <br> without health insurance <br> in 2018", opacity = 0.7)

Routine check-up in the last year in 2018

  • Adjusted percent of survey respondents aged >= 18 who reported having been to the doctor for a routine checkup (excluding visits for a specific injury or illness) in the previous year.
pal <- colorNumeric("Blues", domain = mapdat$Annual_Checkup2018)

leaflet() %>% 
  addProviderTiles("CartoDB.Positron") %>% 
  addPolygons(data = mapdat,
              fillColor = ~pal(mapdat$Annual_Checkup2018),
              weight = 1,
              opacity = 1,
              color = "white", 
              fillOpacity = 0.6,
              highlight = highlightOptions(
                weight = 2,
                fillOpacity = 0.8,
                bringToFront = T),
              popup = paste0("GEOID: ", mapdat$GEOID, "<br>",
                             "Percent of adults who went <br> to the doctor in last year: ", mapdat$Annual_Checkup2018)) %>% 
  leaflet::addLegend("bottomright", pal = pal, values = (mapdat$Annual_Checkup2018), 
            title = "Predicted % of adults <br> who went to the doctor <br> in the last year <br> in 2018", opacity = 0.7)

Visits to dentist/dental clinic in the last year in 2018

  • Adjusted percent of survey respondents aged >= 18 who reported having been to a dentist or dental clinic in the previous year.
pal <- colorNumeric("Blues", domain = mapdat$Dental_Visit2018)

leaflet() %>% 
  addProviderTiles("CartoDB.Positron") %>% 
  addPolygons(data = mapdat,
              fillColor = ~pal(mapdat$Dental_Visit2018),
              weight = 1,
              opacity = 1,
              color = "white", 
              fillOpacity = 0.6,
              highlight = highlightOptions(
                weight = 2,
                fillOpacity = 0.8,
                bringToFront = T),
              popup = paste0("GEOID: ", mapdat$GEOID, "<br>",
                             "Percent of adults who went <br> to the dentist in last year: ", mapdat$Dental_Visit2018)) %>% 
  leaflet::addLegend("bottomright", pal = pal, values = (mapdat$Dental_Visit2018), 
            title = "Predicted % of adults <br> who went to the dentist <br> in the last year <br> in 2018", opacity = 0.7)

Health behaviors

Curent smoking in 2018

  • Adjusted percent of survey respondents aged >= 18 who reported having smoked >= 100 cigarettes in their lifetime and currently smoke every day or some days. This indicator is not a measure of intent or attempts to quit smoking or exposure to secondhand smoke among non-smokers.
pal <- colorNumeric("Blues", domain = mapdat$Current_Smoking2018)

leaflet() %>% 
  addProviderTiles("CartoDB.Positron") %>% 
  addPolygons(data = mapdat,
              fillColor = ~pal(mapdat$Current_Smoking2018),
              weight = 1,
              opacity = 1,
              color = "white", 
              fillOpacity = 0.6,
              highlight = highlightOptions(
                weight = 2,
                fillOpacity = 0.8,
                bringToFront = T),
              popup = paste0("GEOID: ", mapdat$GEOID, "<br>",
                             "Percent of adults who smoke: ", mapdat$Current_Smoking2018)) %>% 
  leaflet::addLegend("bottomright", pal = pal, values = (mapdat$Current_Smoking2018), 
            title = "Predicted % of adults <br> who currently smoke <br> in 2018", opacity = 0.7)

Less than 7 hours of sleep

  • Adjusted percent of survey respondents aged >= 18 who reported usually getting insufficient sleep (<7 hours for those aged >=18 years, during a 24 hour period). This indicator does not measure variation in sleep duration, sleep quality, or specific sleep problems.
pal <- colorNumeric("Blues", domain = mapdat$less_than_sevenhr_sleep2018)

leaflet() %>% 
  addProviderTiles("CartoDB.Positron") %>% 
  addPolygons(data = mapdat,
              fillColor = ~pal(mapdat$less_than_sevenhr_sleep2018),
              weight = 1,
              opacity = 1,
              color = "white", 
              fillOpacity = 0.6,
              highlight = highlightOptions(
                weight = 2,
                fillOpacity = 0.8,
                bringToFront = T),
              popup = paste0("GEOID: ", mapdat$GEOID, "<br>",
                             "Percent of adults who average <7 hrs <br> of sleep a night in 2018: ", mapdat$less_than_sevenhr_sleep2018)) %>% 
  leaflet::addLegend("bottomright", pal = pal, values = (mapdat$less_than_sevenhr_sleep2018), 
            title = "Predicted % of adults <br> who average <7 hrs <br> of sleep a night in 2018", opacity = 0.7)